import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import store from "@/store"
// 把这段代码直接粘贴到router/index.js中的Vue.use(VueRouter)之前
const originalPush = VueRouter.prototype.push;
VueRouter.prototype.push = function(location) {
    return originalPush.call(this, location).catch(err => {})
};
Vue.use(VueRouter)

const routes = [{
        path: '/',
        redirect: "/home"
    },
    {
        path: '/home',
        name: 'Home',
        component: Home
    },
    // {
    //   path: '/about',
    //   name: 'About',
    //   component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
    // }
    {
        path: '/goods',
        name: 'Goods',
        component: () =>
            import ( /* webpackChunkName: "goods" */ '../views/Goods.vue')
    },
    {
        path: '/user',
        name: 'User',
        component: () =>
            import ( /* webpackChunkName: "user" */ '../views/User.vue'),
        redirect: "/user/cart",
        children: [{
            // path: "cart",
            path: "/user/cart",
            component: () =>
                import ( /* webpackChunkName: "cart" */ '../components/user/Cart.vue'),
        }]
    },
    {
        path: '/order',
        name: 'Order',
        component: () =>
            import ( /* webpackChunkName: "order" */ '../views/Order.vue')
    },
    {
        path: '/free',
        name: 'Free',
        component: () =>
            import ( /* webpackChunkName: "free" */ '../views/Free.vue')
    },
    {
        path: '/details',
        name: 'Details',
        component: () =>
            import ( /* webpackChunkName: "details" */ '../views/Details.vue')
    },
    {
        path: '*',
        component: () =>
            import ( /* webpackChunkName: "error" */ '../views/Error.vue')
    }
]

const router = new VueRouter({
    mode: 'history',
    base: process.env.BASE_URL,
    routes
})

/*

在进入到组件之前(切换路径)，我们可能需要做一些准备工作， 
我们会把这些工作的代码放在路由守卫（导航守卫，路由拦截）。
理解为：在进入这个路由之前/ 之后 拦截下来做一个工作
目前需求为：  用户在进入个人中心 /user 之前，需要判断是否已经登录（本地有没token），
所以需要把这代码写在导航守卫里面去
*/

// 全局前置导航守卫
router.beforeEach((to, from, next) => {
    // 什么时候执行这里的代码：  只要发生路由变化，就会执行这里的代码
    // console.log("执行了全局前置导航守卫的代码");

    // console.log("to为：", to);   // 要去到的路由对象 $route
    // console.log("from为：", from); // 从哪个路由对象出发
    // ...
    // 如果 要去的是 /user 需要判断是否已经登录（本地有没token）
    // if (to.path == "/user") {
    //   // 判断是不是已经登录
    //   let token = localStorage.getItem("x-auth-token");
    //   if (token) {
    //     // 有登录就放行
    //     next()
    //   } else {
    //     // 提示还没有登录
    //     store._actions["toastStatus/asyncChanIsShowToast"][0]({
    //       msg: "您还没有登录",
    //       type: "danger",
    //     });

    //   }
    //   return  // 需要在这里书写return， 防止上面判断有登录之后，连续执行两次next()
    // }

    next() // next() 表示放行通过， 没有执行next() 就会跳转不过去
})

export default router